/*
7-6 抢红包（14 分）提问
	没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录，请你统计一下他们抢红包的收获。

	输入格式：
	输入第一行给出一个正整数N（≤10​ 4），即参与发红包和抢红包的总人数，则这些人从1到N编号。
	随后N行，第i行给出编号为i的人发红包的记录，格式如下：
	KN
	​1
	​​ P
	​1
	​​ ⋯N
	​K
	​​ P
	​K
	​​ 

	其中K（0≤K≤20）是发出去的红包个数，N​i是抢到红包的人的编号，P​i（>0）是其抢到的红包金额（以分为单位）。注意：对于同一个人发出的红包，每人最多只能抢1次，不能重复抢。

	输出格式：
	按照收入金额从高到低的递减顺序输出每个人的编号和收入金额（以元为单位，输出小数点后2位）。每个人的信息占一行，两数字间有1个空格。如果收入金额有并列，则按抢到红包的个数递减输出；如果还有并列，则按个人编号递增输出。

	输入样例：
	10
	3 2 22 10 58 8 125
	5 1 345 3 211 5 233 7 13 8 101
	1 7 8800
	2 1 1000 2 1000
	2 4 250 10 320
	6 5 11 9 22 8 33 7 44 10 55 4 2
	1 3 8800
	2 1 23 2 123
	1 8 250
	4 2 121 4 516 7 112 9 10
	输出样例：
	1 11.63
	2 3.63
	8 3.63
	3 2.11
	7 1.69
	6 -1.67
	9 -2.18
	10 -3.26
	5 -3.26
	4 -12.32
*/

#include <iostream>
#include <string.h>
#include <string>
using namespace std;
struct redPackets
{
	int i;
	int num;
	double money;
};
int main()
{
	int n, t, i, j, temp_n;
	scanf("%d", &n);
	double *arr = new double[n];
	int *arr2 = new int[n];
	for(i = 0; i < n; i++)
		arr[i] = 0;
	for(t = 0; t < n; t++)
	{
		scanf("%d", &temp_n);
		for(int k = 0; k < temp_n; k++)
		{
			scanf("%d%d", &j, &i);
			arr[j-1] = arr[j-1] + i;
			arr[t] = arr[t] - i;
			arr2[j-1]++;
		}
	}
	redPackets *reds = new redPackets[n];
	for(i = 0; i < n; i++)
	{
		reds[i].i = i;
		reds[i].money = arr[i];
		reds[i].num = arr2[i];
	}
	for(i = 0; i < n-1; i++)
	{
		for(j = 0; j < n - i - 1;j++)
		{
			if(reds[j].money < reds[j+1].money)
			{
				redPackets temp = reds[j];
				reds[j] = reds[j+1];
				reds[j+1] = temp;
			}
			else if(reds[j].money == reds[j+1].money)
			{
				if(reds[j].num < reds[j+1].num)
				{
					redPackets temp = reds[j];
					reds[j] = reds[j+1];
					reds[j+1] = temp;
				}
			}
		}
	}
	for(i = 0; i < n; i++)
	{
		cout << reds[i].i + 1 << " ";
		printf("%.2f\n", reds[i].money/100);
	}
	return 0;
}